package services

import (
	"encoding/json"

	"cashew.com/cashew_common/utils"
	"github.com/beego/beego/v2/core/logs"
)

// UserDataSyncMessage MQ消息结构体
type UserDataSyncMessage struct {
	UserID    string            `json:"user_id"`
	EventType string            `json:"type"`
	Data      map[string]string `json:"data"`
}

// SyncUserData 通用用户数据同步方法
// 参数说明：
// userID - 用户ID
// eventType - 事件类型，使用common包中定义的常量
// data - 需要同步的数据内容
func SyncUserData(userID string, eventType string, data map[string]string) error {
	// 构造消息体
	syncMsg := UserDataSyncMessage{
		UserID:    userID,
		EventType: eventType,
		Data:      data,
	}

	// 序列化为JSON
	jsonData, err := json.Marshal(syncMsg)
	if err != nil {
		logs.Error("用户数据同步JSON序列化失败",
			"error", err,
			"user_id", userID,
			"event_type", eventType,
			"data", data)
		return err
	}

	// 发送到MQ（假设使用固定的Exchange和RoutingKey）
	_ = utils.GetRabbitMq().Publish(
		"cashew.event.data_updated", // RoutingKey（根据实际需求设置）
		string(jsonData),
	)

	logs.Info("用户数据同步消息发送成功",
		"user_id", userID,
		"event_type", eventType,
		"data_size", len(data))
	return nil
}
